<?php

function chargerClasse($classe) {
    require 'classes/' . $classe . '.php'; // On inclut la classe correspondante au paramètre passé.
}

spl_autoload_register('chargerClasse');
/*
  function fileToObject($fileName) {

  // création du nouvel objet document
  $dom = new DomDocument();

  // chargement à partir du fichier
  $dom->load($fileName);

  // validation à partir de la DTD référencée dans le document.
  // En cas d'erreur, on ne va pas plus loin
  /* if (!@$dom->validate()) {
  return false;
  }

  // création de l'objet résultat
  $object = new stdClass();

  // on référence l'adresse du fichier source
  $object->source = $fileName;

  // on récupère l'élément racine, on le met dans un membre
  // de l'objet nommé "root"
  $root = $dom->documentElement;
  $object->root = new stdClass();

  // appel d'une fonction récursive qui traduit l'élément XML
  // et passe la main à ses enfants, en parcourant tout l'arbre XML.
  getElement($root, $object->root);

  return $object;
  }

  function getElement($dom_element, $object_element) {

  // récupération du nom de l'élément
  $object_element->name = $dom_element->nodeName;

  // récupération de la valeur CDATA,
  // en supprimant les espaces de formatage.
  $object_element->textValue = trim($dom_element->firstChild->nodeValue);

  // Récupération des attributs
  if ($dom_element->hasAttributes()) {
  $object_element->attributes = array();
  foreach ($dom_element->attributes as $attName => $dom_attribute) {
  $object_element->attributes[$attName] = $dom_attribute->value;
  }
  }

  // Récupération des éléments fils, et parcours de l'arbre XML
  // on veut length >1 parce que le premier fils est toujours
  // le noeud texte
  if ($dom_element->childNodes->length > 1) {
  $object_element->children = array();
  foreach ($dom_element->childNodes as $dom_child) {
  if ($dom_child->nodeType == XML_ELEMENT_NODE) {
  $child_object = new stdClass();
  //getElement($dom_child, $child_object);
  array_push($object_element->children, $child_object);
  }
  }
  }
  }
 */
$dom = new DOMDocument();
$dom->load('collection.xml');
$xp = new DOMXPath($dom);

$releaseList = $xp->query('/releases/release');

$releases = iterator_to_array($releaseList);

function getFirstArtistName($release) {
    foreach ($release->getElementsByTagName("artists") as $artists) {
        if ($artists->hasChildNodes()) {
            $artist = $artists->getElementsByTagName("artist")->item(0);
            return $artist->getElementsByTagName("name")->item(0)->nodeValue;
        }
    }
}

function sort_by_artist_name_value($rA, $rB) {
    $newdom = new DOMDocument();
    $nodeA = $newdom->importNode($rA, true);
    $nodeB = $newdom->importNode($rB, true);
    return strnatcasecmp(getFirstArtistName($nodeA), getFirstArtistName($nodeB));
}

usort($releases, 'sort_by_artist_name_value');

$newdom = new DOMDocument();
$newdom->formatOutput = true;
$root = $newdom->createElement("releases");
$newdom->appendChild($root);
foreach ($releases as $r) {
    $node = $newdom->importNode($r, true);
    $root->appendChild($newdom->importNode($r, true));
}

$newArray = DOM::domDocumentToArray($newdom);
for ($index = 0; $index < count($newArray['release']); $index++) {
    $release = new Release($newArray['release'][$index]);
    echo '<pre>';
    echo $release;
    echo '</pre>';
}
 /* echo "<pre>";
print_r($newArray);
  echo "</pre>";
//$newdom->save('collection2.xml');


/* $xmlFile = fileToObject("collection.xml");

  echo "<pre>";
  print_r($xmlFile);
  echo "</pre>";

  $xsl = new DOMDocument;
  $xsl->load('collection.xsl');

  // Configuration du transformateur
  $proc = new XSLTProcessor;
  $proc->importStyleSheet($xsl); // attachement des r�gles xsl
  $newXml = $proc->transformToXML($xml);

  $html = new DOMDocument;
  $html->loadHTML($newXml);
  $html->saveHTMLFile("test.html");
  //print $newXml;
 */
?>